package com.fyb.springcloud.service;

import org.springframework.context.annotation.Bean;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;

import javax.jws.Oneway;
import java.util.Map;
import java.util.Set;

/**
 * @author fyb
 * @version 1.0
 * @date 2021/3/11 11:54
 */

public interface CacheService {

    /**
     * @Author fyb
     * @Description //TODO 保存数据到 redis
     * @Date 14:22 2021/3/11
     * @param key
     * @param value
     * @param expireTime
     * @return boolean
     **/
    boolean save2Redis(String key,String value,long expireTime);
    /**
     * @Author fyb
     * @Description //TODO 从reids中获取数据
     * @Date 15:58 2021/3/11
     * @param key
     * @return java.lang.String
     **/
    String getFromRedis(String key);
    /**
     * @Author fyb
     * @Description //TODO  删除 数据
     * @Date 12:01 2021/3/13
     * @param key
     * @return boolean
     **/

    boolean deleteKey(String key) throws Exception;
    /**
     * @Author fyb
     * @Description //TODO 给指定的key 设置过期时间
     * @Date 15:59 2021/3/11
     * @param key
     * @param expireTime
     * @return boolean
     **/
    boolean expire(String key, long expireTime);
    /**
     * @Author fyb
     * @Description //TODO 获取自增后的数据
     * @Date 16:00 2021/3/11
     * @param key
     * @return java.lang.Long
     **/
    Long getAutoIncrementId(String key);
    /**
     * @Author fyb
     * @Description //TODO 获取指定key中的set的集合
     * @Date 16:01 2021/3/11
     * @param key
     * @return java.util.Set<java.lang.Object>
     **/
    Set<Object> sMembers(String key);
    /**
     * @Author fyb
     * @Description //TODO 向set中添加数据
     * @Date 16:02 2021/3/11
     * @param key
     * @param value
     * @return java.lang.Long
     **/
    Long sAdd(String key,String value);

    /**
     * @Author fyb
     * @Description //TODO 批量向set中添加数据
     * @Date 16:03 2021/3/11
     * @param key
     * @param values
     * @return java.lang.Long
     **/
    Long sAdd(String key,String[] values);
    /**
     * @Author fyb
     * @Description //TODO 删除指定的数据
     * @Date 16:04 2021/3/11
     * @param key
     * @param value
     * @return java.lang.Long
     **/
    Long sRemove(String key,String value);
    /**
     * @Author fyb
     * @Description //TODO 向hash中存放某个数据
     * @Date 16:05 2021/3/11
     * @param key
     * @param filed
     * @param value
     * @return void
     **/
    void hSet(String key,String filed,String value);
    /**
     * @Author fyb
     * @Description //TODO 从hash中获取指定field的数据
     * @Date 16:06 2021/3/11
     * @param key
     * @param filed
     * @return java.lang.String
     **/
    String hGet(String key,String filed);
    /**
     * @Author fyb
     * @Description //TODO 获取 hash 中所有的数据
     * @Date 16:07 2021/3/11
     * @param key
     * @return java.util.Map<java.lang.Object,java.lang.Object>
     **/
    Map<Object,Object> hGetAll(String key);
    /**
     * @Author fyb
     * @Description //TODO setnx操作
     * @Date 16:09 2021/3/11
     * @param key
     * @param value
     * @param expireSecond
     * @return boolean
     **/
    boolean setNX(String key,String value,long expireSecond);

    /**
     * @Author fyb
     * @Description //TODO 批量添加
     * @Date 16:11 2021/3/11
     * @param key
     * @param map
     * @return boolean
     **/
    boolean hMset(String key, Map<String, Object> map);
    /**
     * @Author fyb
     * @Description //TODO 查找符合表达式 key key *
     * @Date 16:12 2021/3/11
     * @param pattern
     * @return java.util.Set<java.lang.String>
     **/
    Set<String>  selectByPattern(String pattern);
    /**
     * @Author fyb
     * @Description //TODO redis中hash 数据的自增操作
     * @Date 16:13 2021/3/11
     * @param key
     * @param field
     * @param delta
     * @return java.lang.Long
     **/
    Long hIncrement(String key,String field,long delta);
}
